#ifndef _CPU_SCHEDULING_H
#define _CPU_SCHEDULING_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node {
    int procID;             // 进程ID
    int releaseTime;        // 到达时间
    int priority;           // 优先级
    int cpuTime;            // 运行时间
    int executedTime;       // 已运行时间
    int state;              // 进程状态
    struct node *next;      // 指向下一个进程指针
} PCB;

typedef struct {
    PCB *head;
    PCB *tail;
} Queue;

void initQueue(Queue *q) ;
int isEmpty(Queue *q) ;
void enqueue_releasetime_first(Queue *q, PCB *pcb);
void enqueue_lefttime_first(Queue *q, PCB *pcb) ;
void enqueue_priority_first(Queue *q, PCB *pcb);
PCB* dequeue(Queue *q) ;
PCB* readTasks(const char *filename) ;

void pprio(PCB *tasks) ;
void prio(PCB *tasks) ;
void psjf(PCB *tasks) ;
void sjf(PCB *tasks) ;

#endif